www.gusucode.com > 基于Visual C++高级界面特效制作百例源码程序 > 基于Visual C++高级界面特效制作百例源码程序/code/char25/TemplateMFC/DisassociateDlg.cpp

    // DisassociateDlg.cpp : implementation file
//

#include "stdafx.h"
#include "TemplateMFC.h"
#include "DisassociateDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

using JetByteTools::CIterateCATID;
using JetByteTools::CComCatInformation;
using JetByteTools::CWin32Exception;
using JetByteTools::CComGUID;

/////////////////////////////////////////////////////////////////////////////
// CDisassociateDlg dialog


CDisassociateDlg::CDisassociateDlg(
	JetByteTools::CGUIDRegistryList &list, 
	CWnd* pParent /*=NULL*/)
	:	CDialog(CDisassociateDlg::IDD, pParent),
		m_list(list),
		m_objectsList(list.Begin(), list.End()),
		m_bImplCatSelected(false),
		m_bReqCatSelected(false) ,
		m_implementsList(CIterateCATID::End(), CIterateCATID::End()),
		m_requiresList(CIterateCATID::End(), CIterateCATID::End())

{
	//{{AFX_DATA_INIT(CDisassociateDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
}


void CDisassociateDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDisassociateDlg)
	DDX_Control(pDX, IDC_REQUIRE_LIST, m_requiresList);
	DDX_Control(pDX, IDC_IMPLEMENT_LIST, m_implementsList);
	DDX_Control(pDX, IDC_OBJECTS_LIST, m_objectsList);
	DDX_Control(pDX, IDOK, m_OKButton);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CDisassociateDlg, CDialog)
	//{{AFX_MSG_MAP(CDisassociateDlg)
	ON_LBN_SELCANCEL(IDC_IMPLEMENT_LIST, OnSelcancelImplementList)
	ON_LBN_SELCHANGE(IDC_IMPLEMENT_LIST, OnSelchangeImplementList)
	ON_LBN_SELCANCEL(IDC_REQUIRE_LIST, OnSelcancelRequireList)
	ON_LBN_SELCHANGE(IDC_REQUIRE_LIST, OnSelchangeRequireList)
	ON_LBN_SELCANCEL(IDC_OBJECTS_LIST, OnSelcancelObjectsList)
	ON_LBN_SELCHANGE(IDC_OBJECTS_LIST, OnSelchangeObjectsList)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDisassociateDlg message handlers

void CDisassociateDlg::OnOK() 
{
	// TODO: Add extra validation here
	
	CDialog::OnOK();
}

BOOL CDisassociateDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();

	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CDisassociateDlg::OnSelcancelImplementList() 
{
	m_bImplCatSelected = false;	

	ManageStateOfOKButton();
}

void CDisassociateDlg::OnSelchangeImplementList() 
{
	m_bImplCatSelected = true;	

	ManageStateOfOKButton();
}

void CDisassociateDlg::OnSelcancelRequireList() 
{
	m_bReqCatSelected = false;	

	ManageStateOfOKButton();
}

void CDisassociateDlg::OnSelchangeRequireList() 
{
	m_bReqCatSelected = true;	

	ManageStateOfOKButton();
}

void CDisassociateDlg::ManageStateOfOKButton()
{
	// Any selected category means we can disassociate...

	m_OKButton.EnableWindow(m_bImplCatSelected || m_bReqCatSelected);
}

void CDisassociateDlg::OnSelcancelObjectsList() 
{
	m_implementsList.DeleteAll();
	m_requiresList.DeleteAll();

	m_bReqCatSelected = false;
	m_bImplCatSelected = false;

	ManageStateOfOKButton();
}

void CDisassociateDlg::OnSelchangeObjectsList() 
{
	// First cancel the previous selections...
	OnSelcancelObjectsList();	

	// Now populate the requires and implements boxes for this
	// object...

	UINT selectedItem = m_objectsList.GetCurSel();

	if (LB_ERR != selectedItem)
	{
		// Now make it so...

		CComGUID *pGuid = m_objectsList.GetItemData(selectedItem);

		if (pGuid)
		{
			try
			{
				::MessageBox(m_hWnd, _T("If your COMCAT.DLL is broken, this will fail!"), 
					_T("Warning"), MB_ICONSTOP);

				CComCatInformation catMgr;

				CIterateCATID implBegin(catMgr.IterateImplCategoriesOfClass(*pGuid));
				CIterateCATID reqBegin(catMgr.IterateReqCategoriesOfClass(*pGuid));

				CIterateCATID end(CIterateCATID::End());

				
				m_implementsList.Populate(implBegin, end);

				m_requiresList.Populate(reqBegin, end);
			}
			catch (CWin32Exception &e)
			{
				e.MessageBox(m_hWnd);
			}
		}
	}

	ManageStateOfOKButton();

}